<?php

namespace App\Http\Controllers\Car;

use App\Models\CarModels\CarAccidentRecord;
use App\Models\CarModels\CarCheckRecord;
use App\Models\CarModels\CarCheckRecordProcess;
use App\Models\CarModels\CarFuelRecord;
use App\Models\CarModels\CarInfo;
use App\Models\CarModels\CarInsuranceRecord;
use App\Models\CarModels\CarMaintence;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Database\QueryException;
use Validator;
use App\Exports\CommonExport;
/**
 * @group 设备管理->任务管理->点检记录
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class CarCheckRecordController extends Controller
{

    /**
     * @queryParam car_id  所属车辆
     * @queryParam odds 异常情况数量
     * @queryParam handles 已处理数量
     * @queryParam department_id 点检部门
     * @queryParam record_id 点检人
     * @queryParam desc 备注
     * @queryParam process->name 点检项目
     * @queryParam process->detail 点检内容
     *
     * @bodyParam search string optional 地址信息（模糊）暂定 原型图不清楚
     * @bodyParam user int optional 筛选负责人信息 暂定 原型图不清楚
     *
     * @bodyParam search string optional 车牌号
     * @bodyParam kind int optional 车型
     * @bodyParam car_id int optional 匹配车辆点检项目
     */
    public function index(Request $request){

        $query = CarCheckRecord::with(['car','record','department','process']);
        $query->whereHas('car',function ($q) use($request){
            $request->has('search') && $q->where('plates_number','like',"%{$request->get('search')}%");
            $request->has('kind') && $q->where('kinds_id', $request->get('kind'));
            $request->has('car_id') && $q->where('id', $request->get('car_id'));
        })->orderBy('created_at','desc');
        return response()->json(encodeMsg(pageQuery($query,$request),200),200);
    }

    /**
     *
     * @bodyParam car_id  int required 所属车辆 外键 车辆信息
     * @bodyParam odds int required 异常情况数量
     * @bodyParam handles int required  已处理数量
     * @bodyParam department_id int required 点检部门 外键 部门信息
     * @bodyParam record_id int required 点检人 外键 用户信息
     * @bodyParam desc string required 备注
     *
     * @queryParam car_id  所属车辆
     * @queryParam odds 异常情况数量
     * @queryParam handles 已处理数量
     * @queryParam department_id 点检部门
     * @queryParam record_id 点检人
     * @queryParam desc 备注
     *
     */
    public function store(Request $request){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        try{
            $data=CarCheckRecord::create($request->all());
            return response()->json(encodeMsg($data,201),201);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"数据添加出错"],400),400);
        }
    }

    /**
     * 注意 url后面的 数字表示的是车辆的所有点检记录
     *
     * @queryParam car_id  所属车辆
     * @queryParam odds 异常情况数量
     * @queryParam handles 已处理数量
     * @queryParam department_id 点检部门
     * @queryParam record_id 点检人
     * @queryParam desc 备注
     * @queryParam car 车辆的信息
     * @queryParam start_time 导出开始日期
     * @queryParam end_time 导出结束日期
     */
    public function show(Request $request,$pk){
        $car = CarInfo::with('department')->with("area")->with('kind')->find($pk);
        $data = CarCheckRecord::with('process')->where('car_id',$pk);
        if($car == []){
            return response()->json(encodeMsg(["message"=>"没有该车辆记录"],404),404);
        }else{
            $res = $data->paginate($request->get('per_page',10));
            $res['car'] = $car;
            return response()->json(encodeMsg($res,200),200);
        }
    }

    /**
     * @bodyParam car_id  int required 所属车辆 外键 车辆信息
     * @bodyParam odds int required 异常情况数量
     * @bodyParam handles int required  已处理数量
     * @bodyParam department_id int required 点检部门 外键 部门信息
     * @bodyParam record_id int required 点检人 外键 用户信息
     * @bodyParam desc string required 备注
     *
     * @queryParam car_id  所属车辆
     * @queryParam odds 异常情况数量
     * @queryParam handles 已处理数量
     * @queryParam department_id 点检部门
     * @queryParam record_id 点检人
     * @queryParam desc 备注
     */
    public function update(Request $request, $pk){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        $carkind = CarCheckRecord::find($pk);
        if($carkind == []){
            return response()->json(["message"=>"没有该事故记录"],404);
        }
        try {
            $carkind->update($request->all());
            return response()->json(encodeMsg($carkind,200), 200);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"名字重复"],400),400);
        }
    }

    /**
     */

    public function destroy($pk){
        $data = CarCheckRecord::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该事故记录"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }


    /**
     *
     *
     * 点检列表记录导出
     * @queryParam id 序号
     * @queryParam car->plates_number 车牌号
     * @queryParam car->kind->kind->name 车辆类型
     * @queryParam car->brand 车辆品牌
     * @queryParam car->status|status:1=>调拨,2=>借用,3=>使用中,4=>停运 状态
     * @queryParam updated_at 最后点检时间
     * @queryParam desc 备注
     */
    public function export(Request $request)
    {
        $cellData = $this->index($request);//excel的内容
        $data = $cellData->getData()->data->data;
        $writer = excelExport($data,genExport());
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="01simple.xlsx"');//execl名字
        $writer->save('php://output');
    }



    /**
     *
     *
     * 点检详细记录导出
     * @queryParam id 序号
     * @queryParam process->name 点检项目
     * @queryParam process->detail 检查内容
     * @queryParam updated_at 日期
     */
    public function exportDetail(Request $request,$pk)
    {
        $cellData = $this->show($request,$pk);//excel的内容
        $data = $cellData->getData()->data->data;
        unset($data->car);
        $writer = excelExport($data,genExport());
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="01simple.xlsx"');//execl名字
        $writer->save('php://output');
    }


}
